package com.yxy.f_music_server.utils;

import com.mpatric.mp3agic.ID3v2;
import com.mpatric.mp3agic.InvalidDataException;
import com.mpatric.mp3agic.Mp3File;
import com.mpatric.mp3agic.UnsupportedTagException;
import com.yxy.f_music_server.constant.MessageConstant;
import com.yxy.f_music_server.domain.po.Song;
import com.yxy.f_music_server.exception.MusicParseException;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

/**
 * 歌曲工具类
 */
public class SongUtil {

    /**
     * 获取歌曲元数据
     * @param file
     * @return
     */
    public static Song getSongMetaData(MultipartFile file) {
        Mp3File mp3File = null;
        File tempFile = null;
        try {
            // 创建一个临时文件
            tempFile = File.createTempFile("music", ".mp3");
            // 删除临时文件在 JVM 退出时（兜底）
            tempFile.deleteOnExit();
            // 将 MultipartFile 写入临时文件
            file.transferTo(tempFile);
            mp3File = new Mp3File(tempFile);
        } catch (IOException | UnsupportedTagException | InvalidDataException e) {
            throw new RuntimeException(e);
        } finally {
            // 使用完成后立即删除临时文件
            if (tempFile.exists()) {
                tempFile.delete();
            }
        }
        if (!mp3File.hasId3v2Tag()) {
            throw new MusicParseException(MessageConstant.MUSIC_PARSE_EXCEPTION);
        }
        ID3v2 id3v2Tag = mp3File.getId3v2Tag();
        return Song.builder()
                .title(id3v2Tag.getTitle())
                .singer(id3v2Tag.getArtist())
                .origin(id3v2Tag.getComment())
                .build();
    }
}
